//
//  FYUserAccountViewModel.swift
//  Weibo
//
//  Created by 冯毅 on 16/8/10.
//  Copyright © 2016年 冯毅. All rights reserved.
//

import UIKit
//  封装OAuth相关网络请求接口,对应的控制器 FYOAuthViewController
class FYUserAccountViewModel: NSObject {
    static let sharedUserAccount: FYUserAccountViewModel = FYUserAccountViewModel()
    //  用户账号模型
    var userAccount: FYUserAccount? {
        return FYUserAccount.loadUserAccount()
    }
    
    //判断是否登录
    var isLogin: Bool {
        return accessToken != nil
    }
    
    //封装accessToken,判断逻辑
    var accessToken: String? {
        //  判断accesstoken是否为nil
        guard let token = userAccount?.access_token else {
            return nil
        }
        
        //  如果accessToken不为nil,判断accessToken的时间是否过期
        let result = userAccount?.expiresDate?.compare(NSDate())
        //  如果是降序,表示accessToken没有过期
        if result == NSComparisonResult.OrderedDescending {
            return token
        } else {
            return nil
        }
    }
    
    
    //  通过code获取accessToken
    func reqeustAccessTokenWithCode(code: String, callBack: (isSuccess: Bool)->()) {
        
        FYNetworkTools.sharedTools.reqeustAccessTokenWithCode(code) { (response, error) -> () in
            if error != nil {
                print("网络请求失败\(error)")
                
                callBack(isSuccess: false)
                
                return
            }
            
            //判断服务端给的数据是否是一个正确的字典
            guard let dic = response as? [String: AnyObject] else {
                print("不是一个正确的字典格式")
                callBack(isSuccess: false)
                return
            }
            //  代码执行到此,字典没有问题
            let userAccount = FYUserAccount(dic: dic)
            print(userAccount.access_token)
            //  请求用户基本信息
            self.requestUserInfo(userAccount, callBack: callBack)
        }
        
    }
    //通过accessToken和uid 获取用户信息
    private func requestUserInfo(userAccount: FYUserAccount, callBack: (isSuccess: Bool)->()) {
        
        FYNetworkTools.sharedTools.requestUserInfo(userAccount) { (response, error) -> () in
            if error != nil {
                print("网络请求失败,\(error)")
                callBack(isSuccess: false)
                return
            }
            
            //代码执行到此,表示网络请求成功
            guard let dic = response as? [String: AnyObject] else {
                print("不是一个正确的字典格式")
                callBack(isSuccess: false)
                return
            }
            //代码执行到此,表示字典没有问题
            let name = dic["name"]
            let avatar_large = dic["avatar_large"]
            
            userAccount.name = name as? String
            userAccount.avatar_large = avatar_large as? String
            
            print(userAccount)
            //表示用户登录成功
            //保存用户账号的模型
            userAccount.saveUserAccount()
            //执行成功回调的闭包
            callBack(isSuccess: true)
            
        }
        
    }

    
}
